package com.fowo.api.service;

import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: <a href="1006319834@qq.com">王冰卿</a>
 * @Description:
 * @Version: 1.0
 * @Date: Created in 2023/3/19 23:53
 * @Modified By:
 */
public interface LingXingInterfaceService {

	/**
	 *  同步产品详情
	 * @param sku
	 * @param id
	 */
	void syncProductInfo(String sku ,Integer id);

	void syncAmazonOrderListStockOutWithErr();

	/**
	 *
	 * @param sku
	 */
	void syncProductInfoBatch(String sku);

	/**
	 * 同步并更新产品
	 * @return
	 */
	void syncProduct();

	/**
	 * 根据创建时间同步并更新产品
	 * @return
	 */
	void syncByTimeProduct(JSONObject object);

	void syncByCreateTimeProduct();

	void syncByUpdateTimeProduct();

	/**
	 * 同步并更新供应商
	 */
	void syncSupplier() throws Exception;

	/**
	 * 同步更新店铺
	 */
	void syncShop();

	/**
	 * 同步新增数据并更新仓库列表
	 */
	void syncWarehouse();
	void syncFBAWarehouse() throws Exception;
	/**
	 * 同步新增数据并更新仓位列表
	 * @return
	 */
	void syncWarehouseBin(JSONObject wid) throws Exception;

	/**
	 * 根据仓库编码同步新增数据并更新仓位列表
	 * @return
	 */
	void syncByWidWarehouseBin(String wid) throws Exception;

	/**
	 * 销售出库单(已发货)同步领星数据
	 *
	 */
	void syncWmsOrderList();

	/**
	 * 销售出库单(已发货)同步领星新增数据
	 * 时间类型：
	 * 出库时间【单据操作】 delivered_at
	 */
	void syncAddWmsOrderList(JSONObject jsonObject);


	/**
	 * 同步新增亚马逊订单数据（当前日期前三天数据）时间类型默认为1下单日期
	 */
	void syncAmazonOrderList();

	/**
	 * 同步新增亚马逊订单数据（手动输入开始日期和结束日期）时间类型默认为1下单日期
	 */
	void syncAmazonOrderList1(JSONObject object);


	/**
	 * 亚马逊订单详情
	 * @param n
	 * @param token
	 */
	void syncAmazonOrderListDetail(int n,String token);
	void syncAmazonOrderListDetail2(int n, String token);

	/**
	 * 销售统计
	 * event_date报表时间
	 * asin_type查询维度2 msku
	 * type类型2 销量
	 * 按照店铺编码拉取指定月份报表时间数据
	 * @param year
	 * @param month
	 */
	void syncSalesDailyList(int year,int month);

	void syncSalesDailyListByDayAndSid(int sid,String day);

	void syncSalesDailyListByToDay();

	void syncSalesDailyListByDay(JSONObject data);


	/**
	 * listing
	 */
	void syncListing();

	void syncListingByShop(JSONObject data);

	/**
	 * FBA库存数据
	 */
	void syncFBAInventory();

	void syncFBAInventoryByShop(JSONObject data);


//	============================

	/**
	 * 同步入库单
	 * @return
	 */
	void syncStockIn();

	/**
	 * 同步出库单
	 * @return
	 */
	void syncStockOut();

	/**
	 * 同步本地仓库期初库存
	 */
	void syncLocalInventory();

	void syncFbaInventory();

	/**
	 * 同步利润报表-店铺
	 */
	void syncShopProfit(JSONObject jsonObject);

	/**
	 * 同步销售出库单
	 */
	void syncSalesOutbound();

	void syncSalesOutbound2(JSONObject orderSn);

	/**
	 * 更新产品
	 * @return
	 */
	void updateProduct();

	void updateSalesOutboundOne();
	void updateSalesOutboundTwo();
	void updateSalesOutboundThree();
	void updateSalesOutboundFour();
	void updateSalesOutbound();

	/**
	 *  采购订单
	 * @param offset 页数
	 * @param length   分页数量
	 * @param startDate 开始时间 yyy-mm-dd
	 * @param endDate   结束时间 yyy-mm-dd
	 *  @param isRun 继续拉取   1 继续同步数据
	 */
	void syncPurchaseOrder(Integer offset,Integer length, String startDate, String endDate,Integer isRun);

	/**
	 * 亚马逊多渠道订单+亚马逊多渠道详情订单
	 */
	void syncAmazonOutbound();

	/**
	 * 亚马逊售后订单列表
	 */
	void syncAfterSaleList();

	/**
	 * 亚马逊FBM（自发货）订单列表
	 */
	void syncRoutingOrderList();

	/**
	 * 库存明细
	 */
	void syncInventoryDetails(int i);
	/**
	 * 仓位/库位明细 期初数据 添加库位表 即时库存表
	 */
	void syncInventoryBinDetails() throws Exception;

	/**
	 * 仓位/库位明细 期初数据 添加库位表 即时库存表 新 已经转换数据 直接填充表单 处理
	 */
	void syncInventoryBinDetailsNews() throws Exception;


	/**
	 *   数据拉到临时表 直接处理 即时库存表
	 */
	void testSyncInventoryBinDetails() throws Exception;


	/**
	 * 库存明细    期初数据 添加即时库存 //暂不用 用 仓位表添加即时库存
	 */
	void syncInventoryDetails () throws Exception;

	/**
	 * 同步 FBA发货单（待发货）列表
	 *  先查列表 在查详情表 详情批量最多50条
	 */
	void syncInboundShipmentList() throws  Exception;

	/**
	 *  FBA发货单（待发货） 发货
	 * @param ids  参数
	 * @throws Exception
	 */
	void InboundShipmentSendGoods(List<Long> ids) throws  Exception;

	/**
	 * 货件
	 */
	void syncshipmentList();

	/**
	 * 拉取调拨单数据
	 */
	void saveRequisition();

	/**
	 * 拉取调整单数据
	 */
	void saveAdjustmentOrder();
	/**
	 * 拉取盘点单数据
	 */
	void saveInventoryList();

	void getCustomer();

	void syncClassify();
}
